package com.hdax.search.thread;


import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 两个线程任务都完毕，才可执行下一个任务
 */
public class Text02 {


    public static ExecutorService executorService= Executors.newFixedThreadPool(10);

    public static void main(String[] args) {
        CompletableFuture<Integer> 任务一 = CompletableFuture.supplyAsync(() -> {
            System.out.println("任务一");
            return 1;
        }, executorService);


        CompletableFuture<Integer> 任务二 = CompletableFuture.supplyAsync(() -> {
            System.out.println("任务二");
            return 1;
        }, executorService);


        /**
         * 1、runAfterBothAsync:无法感知到以上两个任务的返回结果
         */
        任务一.runAfterBothAsync(任务二,()->{
            System.out.println("任务三开始");
        },executorService);


        /**
         * 2、thenAcceptBothAsync:可以获取到以上两个任务的返回值，自身没有返回值
         */
        任务一.thenAcceptBothAsync(任务二,(one,two)->{
            System.out.println(one+two);
        },executorService);


        /**
         * 3、thenCombineAsync:可以获取到以上两个线程的返回值，并且自身也有返回值
         */
        任务一.thenCombineAsync(任务二,(one,two)->{
            System.out.println(one+two);
            return null;
        },executorService);









    }
}
